home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / ada_lrm / chap08.doc < prev    next >
Text File  |  1996-01-30  |  39KB  |  855 lines

  1.                             8. Visibility Rules
  2.  
  3.  
  4. The  rules  defining the scope of declarations and the rules defining which
  5. identifiers are visible at various points in the text of  the  program  are
  6. described  in this chapter.  The formulation of these rules uses the notion
  7. of a declarative region.
  8.  
  9.  
  10. References:  declaration 3.1, declarative region 8.1, identifier 2.3, scope
  11. 8.2, visibility 8.3
  12.  
  13. 8.1  Declarative Region
  14.  
  15.  
  16. A  declarative  region  is  a  portion  of  the  program  text.   A  single
  17. declarative region is formed by the text of each of the following:
  18.  
  19.  
  20.   -  A subprogram declaration, a package declaration, a  task  declaration,
  21.      or  a  generic  declaration,  together with the corresponding body, if
  22.      any.  If the body is a body stub, the declarative region also includes
  23.      the corresponding subunit.  If the program unit has subunits, they are
  24.      also included.
  25.  
  26.  
  27.   -  An  entry  declaration  together   with   the   corresponding   accept
  28.      statements.
  29.  
  30.  
  31.   -  A record type declaration, together with a  corresponding  private  or
  32.      incomplete  type declaration if any, and together with a corresponding
  33.      record representation clause if any.
  34.  
  35.  
  36.   -  A renaming declaration that includes  a  formal  part,  or  a  generic
  37.      parameter  declaration  that  includes  either  a  formal  part  or  a
  38.      discriminant part.
  39.  
  40.  
  41.   -  A block statement or a loop statement.
  42.  
  43.  
  44. In each of the above cases, the declarative region is said to be associated
  45. with the corresponding declaration or statement.  A declaration is said  to
  46. occur  immediately  within  a  declarative  region  if  this  region is the
  47. innermost  region  that  encloses  the  declaration,   not   counting   the
  48. declarative region (if any) associated with the declaration itself.
  49.  
  50.  
  51. A  declaration  that occurs immediately within a declarative region is said
  52. to be local to the region.  Declarations in outer (enclosing)  regions  are
  53. said  to  be  global  to  an  inner (enclosed) declarative region.  A local
  54. entity is one declared by a local declaration;   a  global  entity  is  one
  55. declared by a global declaration.
  56.  
  57.  
  58. Some  of  the  above  forms  of declarative region include several disjoint
  59. parts (for example, other declarative items can be between the  declaration
  60. of  a  package  and  its  body).   Each  declarative region is nevertheless
  61. considered as a (logically) continuous portion of the program text.   Hence
  62. if  any  rule defines  a portion of text as the text that extends from some
  63. specific point of a declarative region to the end of this region, then this
  64. portion is the corresponding subset of the declarative region (for  example
  65. it does not include intermediate declarative items between the two parts of
  66. a package).
  67.  
  68. Notes:
  69.  
  70.  
  71. As   defined   in   section   3.1,  the  term  declaration  includes  basic
  72. declarations, implicit declarations, and those declarations that  are  part
  73. of   basic   declarations,   for   example,   discriminant   and  parameter
  74. specifications.  It follows from the definition  of  a  declarative  region
  75. that  a  discriminant  specification  occurs  immediately within the region
  76. associated with  the  enclosing  record  type  declaration.   Similarly,  a
  77. parameter  specification  occurs  immediately  within the region associated
  78. with the enclosing subprogram body or accept statement.
  79.  
  80.  
  81. The package STANDARD forms a declarative region which encloses all  library
  82. units:   the  implicit declaration of each library unit is assumed to occur
  83. immediately within this package (see sections 8.6 and 10.1.1).
  84.  
  85.  
  86. Declarative regions can be nested within other  declarative  regions.   For
  87. example,  subprograms,  packages,  task  units,  generic  units,  and block
  88. statements can be nested within each other, and  can  contain  record  type
  89. declarations, loop statements, and accept statements.
  90.  
  91.  
  92. References:   accept  statement 9.5, basic declaration 3.1, block statement
  93. 5.6, body stub 10.2, declaration 3.1, discriminant part 3.7.1, discriminant
  94. specification 3.7.1, entry declaration 9.5, formal part 6.1,  generic  body
  95. 12.2,   generic  declaration  12.1,  generic  parameter  declaration  12.1,
  96. implicit declaration 3.1, incomplete type declaration 3.8.1,  library  unit
  97. 10.1,  loop statement 5.5, package 7, package body 7.1, package declaration
  98. 7.1, parameter specification 6.1,  private  type  declaration  7.4,  record
  99. representation  clause  13.4,  record  type  3.7, renaming declaration 8.5,
  100. standard package 8.6, subprogram  body  6.3,  subprogram  declaration  6.1,
  101. subunit 10.2, task body 9.1, task declaration 9.1, task unit 9
  102.  
  103. 8.2  Scope of Declarations
  104.  
  105.  
  106. For  each  form of declaration, the language rules define a certain portion
  107. of the program text called the scope of the declaration.  The  scope  of  a
  108. declaration  is  also  called  the  scope  of  any  entity  declared by the
  109. declaration.  Furthermore, if the declaration associates some notation with
  110. a declared entity, this portion of the text is also  called  the  scope  of
  111. this  notation  (either  an  identifier,  a  character literal, an operator
  112. symbol, or the notation for a basic operation).  Within  the  scope  of  an
  113. entity,  and  only  there,  there  are  places where it is legal to use the
  114. associated notation in order to refer to the declared entity.  These places
  115. are defined by the rules of visibility and overloading.
  116.  
  117.  
  118. The scope of a declaration that occurs  immediately  within  a  declarative
  119. region  extends  from  the  beginning  of the declaration to the end of the
  120. declarative region;  this part of the scope of a declaration is called  the
  121. immediate  scope.   Furthermore,  for any of the declarations listed below,
  122. the scope of the declaration extends beyond the immediate scope:
  123.  
  124.  
  125. (a)  A declaration that occurs immediately within the  visible  part  of  a
  126.      package declaration.
  127.  
  128.  
  129. (b)  An entry declaration.
  130.  
  131.  
  132. (c)  A component declaration.
  133.  
  134.  
  135. (d)  A discriminant specification.
  136.  
  137.  
  138. (e)  A parameter specification.
  139.  
  140.  
  141. (f)  A generic parameter declaration.
  142.  
  143.  
  144. In  each  of  these  cases, the given declaration occurs immediately within
  145. some enclosing declaration, and the scope of the given declaration  extends
  146. to the end of the scope of the enclosing declaration.
  147.  
  148.  
  149. In  the  absence  of a subprogram declaration, the subprogram specification
  150. given in the subprogram body or in the body stub acts  as  the  declaration
  151. and rule (e) applies also in such a case.
  152.  
  153. Note:
  154.  
  155.  
  156. The  above scope rules apply to all forms of declaration defined by section
  157. 3.1;  in particular, they apply also to implicit  declarations.   Rule  (a)
  158. applies  to a package declaration and thus not to the package specification
  159. of a generic declaration.  For nested declarations, the rules  (a)  through
  160. (f)  apply  at  each level.  For example, if a task unit is declared in the
  161. visible part of a package, the scope of an entry of the task  unit  extends
  162. to  the end of the scope of the task unit, that is, to the end of the scope
  163. of the enclosing package.  The scope of a use clause is defined in  section
  164. 8.4.
  165.  
  166.  
  167. References:   basic operation 3.3.3, body stub 10.2, character literal 2.5,
  168. component  declaration  3.7,  declaration  3.1,  declarative  region   8.1,
  169. discriminant  specification  3.7.1,  entry  declaration  9.5,  extends 8.1,
  170. generic declaration 12.1, generic parameter  declaration  12.1,  identifier
  171. 2.3,  implicit  declaration  3.1,  occur  immediately  within 8.1, operator
  172. symbol  6.1,  overloading  6.6  8.7,  package  declaration   7.1,   package
  173. specification  7.1,  parameter specification 6.1, record type 3.7, renaming
  174. declaration 8.5, subprogram body  6.3,  subprogram  declaration  6.1,  task
  175. declaration  9.1,  task  unit  9,  type  declaration 3.3.1, use clause 8.4,
  176. visibility 8.3, visible part 7.2
  177.  
  178. 8.3  Visibility
  179.  
  180.  
  181. The meaning of the occurrence of an identifier at a given place in the text
  182. is defined by the visibility rules and also,  in  the  case  of  overloaded
  183. declarations, by the overloading rules.  The identifiers considered in this
  184. chapter  include  any  identifier  other than a reserved word, an attribute
  185. designator, a pragma identifier, the identifier of a pragma argument, or an
  186. identifier given as a pragma  argument.   The  places  considered  in  this
  187. chapter  are  those where a lexical element (such as an identifier) occurs.
  188. The overloaded declarations  considered  in  this  chapter  are  those  for
  189. subprograms, enumeration literals, and single entries.
  190.  
  191.  
  192. For  each  identifier  and  at each place in the text, the visibility rules
  193. determine a set of declarations (with this identifier) that define possible
  194. meanings of an occurrence of the identifier.  A declaration is said  to  be
  195. visible  at  a  given  place  in the text when, according to the visibility
  196. rules, the declaration defines a possible meaning of this occurrence.   Two
  197. cases arise.
  198.  
  199.  
  200.   -  The visibility rules determine at most one possible meaning.  In  such
  201.      a   case   the  visibility  rules  are  sufficient  to  determine  the
  202.      declaration defining the meaning of the occurrence of the  identifier,
  203.      or  in  the  absence  of  such  a  declaration,  to determine that the
  204.      occurrence is not legal at the given point.
  205.  
  206.  
  207.   -  The visibility rules determine more than  one  possible  meaning.   In
  208.      such a case the occurrence of the identifier is legal at this point if
  209.      and  only  if  exactly  one  visible declaration is acceptable for the
  210.      overloading rules in the given context (see section 6.6 for the  rules
  211.      of  overloading  and  section  8.7  for  the context used for overload
  212.      resolution).
  213.  
  214.  
  215. A declaration is only visible within a certain part  of  its  scope;   this
  216. part   starts   at   the  end  of  the  declaration  except  in  a  package
  217. specification, in which case it starts at the reserved word is given  after
  218. the  identifier  of  the  package  specification.   (This  rule applies, in
  219. particular, for implicit declarations.)
  220.  
  221.  
  222. Visibility is either by selection or direct.  A declaration is  visible  by
  223. selection at places that are defined as follows.
  224.  
  225.  
  226. (a)  For a declaration given in the visible part of a package  declaration:
  227.      at  the  place of the selector after the dot of an expanded name whose
  228.      prefix denotes the package.
  229.  
  230.  
  231. (b)  For an entry declaration of a given task type:  at the  place  of  the
  232.      selector  after  the  dot  of  a  selected  component  whose prefix is
  233.      appropriate for the task type.
  234.  
  235.  
  236. (c)  For a component declaration of a given record  type  declaration:   at
  237.      the  place of the selector after the dot of a selected component whose
  238.      prefix is appropriate for the type;  also at the place of a  component
  239.      simple  name  (before  the compound delimiter =>) in a named component
  240.      association of an aggregate of the type.
  241.  
  242.  
  243. (d)  For a discriminant specification of a given type declaration:  at  the
  244.      same  places  as  for a component declaration;  also at the place of a
  245.      discriminant simple name (before the compound delimiter =>) in a named
  246.      discriminant association of a discriminant constraint for the type.
  247.  
  248.  
  249. (e)  For a parameter specification of a given subprogram  specification  or
  250.      entry  declaration:   at the place of the formal parameter (before the
  251.      compound  delimiter  =>)  in  a  named  parameter  association  of   a
  252.      corresponding subprogram or entry call.
  253.  
  254.  
  255. (f)  For a generic parameter declaration of a given generic unit:   at  the
  256.      place  of  the generic formal parameter (before the compound delimiter
  257.      =>)  in  a  named  generic  association  of  a  corresponding  generic
  258.      instantiation.
  259.  
  260.  
  261. Finally,  within  the  declarative region associated with a construct other
  262. than a record type declaration, any  declaration  that  occurs  immediately
  263. within  the  region  is  visible  by selection at the place of the selector
  264. after the dot of an expanded name whose prefix denotes the construct.
  265.  
  266.  
  267. Where it is not visible by selection, a visible declaration is said  to  be
  268. directly  visible.  A declaration is directly visible within a certain part
  269. of its immediate scope;  this part extends to  the  end  of  the  immediate
  270. scope  of  the  declaration,  but  excludes places where the declaration is
  271. hidden  as  explained  below.   In  addition,   a   declaration   occurring
  272. immediately  within  the  visible  part  of  a package can be made directly
  273. visible by means of a use  clause  according  to  the  rules  described  in
  274. section  8.4.   (See also section 8.6 for the visibility of library units.)
  275.  
  276.  
  277. A declaration is said to be hidden within (part of)  an  inner  declarative
  278. region  if  the inner region contains a homograph of this declaration;  the
  279. outer declaration is then hidden within the immediate scope  of  the  inner
  280. homograph.  Each of two declarations is said to be a homograph of the other
  281. if  both  declarations  have the same identifier and overloading is allowed
  282. for  at  most  one  of  the  two.   If  overloading  is  allowed  for  both
  283. declarations, then each of the two is a homograph of the other if they have
  284. the  same identifier, operator symbol, or character literal, as well as the
  285. same parameter and result type profile (see 6.6).
  286.  
  287.  
  288. Within the specification of a subprogram, every declaration with  the  same
  289. designator  as  the  subprogram is hidden;  the same holds within a generic
  290. instantiation that declares a subprogram, and within an  entry  declaration
  291. or  the formal part of an accept statement;  where hidden in this manner, a
  292. declaration is visible neither by selection  nor directly.
  293.  
  294.  
  295. Two declarations that occur immediately within the same declarative  region
  296. must not be homographs, unless either or both of the following requirements
  297. are  met:   (a)  exactly  one  of  them  is  the  implicit declaration of a
  298. predefined operation;  (b) exactly one of them is the implicit  declaration
  299. of  a  derived subprogram.  In such cases, a predefined operation is always
  300. hidden by the other homograph;  a derived  subprogram  hides  a  predefined
  301. operation,  but  is  hidden  by  any other homograph.  Where hidden in this
  302. manner, an implicit declaration is hidden within the entire  scope  of  the
  303. other  declaration  (regardless  of  which  declaration occurs first);  the
  304. implicit declaration is visible neither by selection nor directly.
  305.  
  306.  
  307. Whenever a declaration with a certain identifier is visible  from  a  given
  308. point,  the identifier and the declared entity (if any) are also said to be
  309. visible from that point.  Direct visibility and visibility by selection are
  310. likewise defined for character literals and operator symbols.  An  operator
  311. is  directly  visible if and only if the corresponding operator declaration
  312. is directly  visible.   Finally,  the  notation  associated  with  a  basic
  313. operation is directly visible within the entire scope of this operation.
  314.  
  315.  
  316. Example:
  317.  
  318.     procedure P is
  319.        A, B : BOOLEAN;
  320.  
  321.        procedure Q is
  322.           C : BOOLEAN;
  323.           B : BOOLEAN;  --  an inner homograph of B
  324.        begin
  325.           ...
  326.           B := A;    --  means Q.B := P.A;
  327.           C := P.B;  --  means Q.C := P.B;
  328.        end;
  329.     begin
  330.        ...
  331.        A := B;  --  means P.A := P.B;
  332.     end;
  333.  
  334. Note on the visibility of library units:
  335.  
  336.  
  337. The  visibility of library units is determined by with clauses (see 10.1.1)
  338. and by the fact that library units are implicitly declared in  the  package
  339. STANDARD (see 8.6).
  340.  
  341. Note on homographs:
  342.  
  343.  
  344. The  same  identifier  may  occur in different declarations and may thus be
  345. associated  with  different  entities,  even  if  the   scopes   of   these
  346. declarations  overlap.  Overlap of the scopes of declarations with the same
  347. identifier can result from overloading of subprograms  and  of  enumeration
  348. literals.   Such  overlaps  can also occur for entities declared in package
  349. visible parts and for entries, record  components,  and  parameters,  where
  350. there  is overlap of the scopes of the enclosing package declarations, task
  351. declarations, record type declarations, subprogram  declarations,  renaming
  352. declarations,  or  generic  declarations.   Finally  overlapping scopes can
  353. result from nesting.
  354.  
  355. Note on immediate scope, hiding, and visibility:
  356.  
  357.  
  358. The rules defining immediate scope, hiding, and  visibility  imply  that  a
  359. reference  to  an  identifier within its own declaration is illegal (except
  360. for packages and generic packages).  The identifier hides outer  homographs
  361. within  its  immediate  scope, that is,  from the start of the declaration;
  362. on the other hand, the identifier is visible only  after  the  end  of  the
  363. declaration.    For  this  reason,  all  but  the  last  of  the  following
  364. declarations are illegal:
  365.  
  366.     K : INTEGER := K * K;              --  illegal
  367.     T : T;                             --  illegal
  368.     procedure P(X : P);                --  illegal
  369.     procedure Q(X : REAL := Q);        --  illegal, even if there is a function named Q
  370.     procedure R(R : REAL);   --  an inner declaration is legal (although confusing)
  371.  
  372.  
  373. References:  accept statement 9.5, aggregate 4.3, appropriate  for  a  type
  374. 4.1,  argument 2.8, basic operation 3.3.3, character literal 2.5, component
  375. association  4.3,  component  declaration  3.7,  compound  delimiter   2.2,
  376. declaration  3.1,  declarative  region  8.1,  designate  3.8,  discriminant
  377. constraint 3.7.2, discriminant specification 3.7.1, entry call  9.5,  entry
  378. declaration 9.5, entry family 9.5, enumeration literal specification 3.5.1,
  379. expanded name 4.1.3, extends 8.1, formal parameter 6.1, generic association
  380. 12.3,  generic  formal  parameter 12.1, generic instantiation 12.3, generic
  381. package  12.1,  generic  parameter  declaration  12.1,  generic  unit   12,
  382. identifier  2.3,  immediate  scope  8.2,  implicit declaration 3.1, lexical
  383. element 2.2, library unit 10.1, object 3.2, occur immediately  within  8.1,
  384. operator  4.5,  operator  symbol  6.1,  overloading  6.6  8.7,  package  7,
  385. parameter 6.2, parameter  association  6.4,  parameter  specification  6.1,
  386. pragma  2.8, program unit 6, record type 3.7, reserved word 2.9, scope 8.2,
  387. selected component 4.1.3, selector 4.1.3, simple name  4.1,  subprogram  6,
  388. subprogram  call  6.4, subprogram declaration 6.1, subprogram specification
  389. 6.1, task type 9.1, task unit 9, type  3.3,  type  declaration  3.3.1,  use
  390. clause 8.4, visible part 7.2
  391.  
  392. 8.4  Use Clauses
  393.  
  394.  
  395. A  use clause achieves direct visibility of declarations that appear in the
  396. visible parts of named packages.
  397.  
  398.  
  399.     use_clause ::= use package_name {, package_name};
  400.  
  401.  
  402. For each use clause, there is a certain region of text called the scope  of
  403. the use clause.  This region starts immediately after the use clause.  If a
  404. use  clause  is a declarative item of some declarative region, the scope of
  405. the clause extends to the end of the declarative region.  If a  use  clause
  406. occurs  within a context clause of a compilation unit, the scope of the use
  407. clause extends to the end of the declarative  region  associated  with  the
  408. compilation unit.
  409.  
  410.  
  411. In  order to define which declarations are made directly visible at a given
  412. place by use clauses, consider the set of packages named by all use clauses
  413. whose scopes enclose this place, omitting from this set any  packages  that
  414. enclose  this  place.  A declaration that can be made directly visible by a
  415. use clause (a potentially visible  declaration)  is  any  declaration  that
  416. occurs  immediately  within  the  visible  part of a package of the set.  A
  417. potentially visible declaration is actually made directly visible except in
  418. the following two cases:
  419.  
  420.  
  421.   -  A potentially visible declaration is not made directly visible if  the
  422.      place  considered  is within the immediate scope of a homograph of the
  423.      declaration.
  424.  
  425.  
  426.   -  Potentially visible declarations that have the same identifier are not
  427.      made directly visible unless each of them  is  either  an  enumeration
  428.      literal  specification  or  the  declaration  of  a  subprogram  (by a
  429.      subprogram   declaration,   a   renaming   declaration,   a    generic
  430.      instantiation, or an implicit declaration).
  431.  
  432.  
  433. The elaboration of a use clause has no other effect.
  434.  
  435. Note:
  436.  
  437.  
  438. The  above rules guarantee that a declaration that is made directly visible
  439. by a use clause cannot hide an otherwise directly visible declaration.  The
  440. above rules are formulated in terms of the set of  packages  named  by  use
  441. clauses.
  442.  
  443.  
  444. Consequently,  the  following  lines  of  text  all  have  the  same effect
  445. (assuming only one package P).
  446.  
  447.     use P;
  448.     use P; use P, P;
  449.  
  450.  
  451. Example of conflicting names in two packages:
  452.  
  453.     procedure R is
  454.        package TRAFFIC is
  455.           type COLOR is (RED, AMBER, GREEN);
  456.           ...
  457.        end TRAFFIC;
  458.  
  459.        package WATER_COLORS is
  460.           type COLOR is (WHITE, RED, YELLOW, GREEN, BLUE, BROWN, BLACK);
  461.           ...
  462.        end WATER_COLORS;
  463.  
  464.        use TRAFFIC;       --  COLOR, RED, AMBER, and GREEN are directly visible
  465.        use WATER_COLORS;  --  two homographs of GREEN are directly visible
  466.                           --  but COLOR is no longer directly visible
  467.  
  468.        subtype LIGHT is TRAFFIC.COLOR;      -- Subtypes are used to resolve
  469.        subtype SHADE is WATER_COLORS.COLOR; -- the conflicting type name COLOR
  470.  
  471.        SIGNAL : LIGHT;
  472.        PAINT  : SHADE;
  473.     begin
  474.        SIGNAL := GREEN;  --  that of TRAFFIC
  475.        PAINT  := GREEN;  --  that of WATER_COLORS
  476.     end R;
  477.  
  478.  
  479. Example of name identification with a use clause:
  480.  
  481.        package D is
  482.           T, U, V : BOOLEAN;
  483.        end D;
  484.  
  485.        procedure P is
  486.           package E is
  487.              B, W, V : INTEGER;
  488.           end E;
  489.  
  490.           procedure Q is
  491.              T, X : REAL;
  492.              use D, E;
  493.           begin
  494.              --  the name T means Q.T, not D.T
  495.              --  the name U means D.U
  496.              --  the name B means E.B
  497.              --  the name W means E.W
  498.              --  the name X means Q.X
  499.              --  the name V is illegal : either D.V or E.V must be used
  500.              ...
  501.           end Q;
  502.        begin
  503.           ...
  504.        end P;
  505.  
  506.  
  507. References:  compilation unit 10.1, context clause 10.1,  declaration  3.1,
  508. declarative  item  3.9,  declarative  region  8.1,  direct  visibility 8.3,
  509. elaboration 3.1 3.9, elaboration  has  no  other  effect  3.1,  enumeration
  510. literal  specification  3.5.1,  extends  8.1,  hiding  8.3,  homograph 8.3,
  511. identifier 2.3, immediate scope 8.2, name  4.1,  occur  immediately  within
  512. 8.1, package 7, scope 8.2, subprogram declaration 6.1, visible part 7.2
  513.  
  514. 8.5  Renaming Declarations
  515.  
  516.  
  517. A renaming declaration declares another name for an entity.
  518.  
  519.  
  520.     renaming_declaration ::=
  521.          identifier : type_mark   renames object_name;
  522.        | identifier : exception   renames exception_name;
  523.        | package identifier       renames package_name;
  524.        | subprogram_specification renames subprogram_or_entry_name;
  525.  
  526.  
  527. The  elaboration  of a renaming declaration evaluates the name that follows
  528. the reserved word renames and thereby determines the entity denoted by this
  529. name (the renamed entity).  At any point where a  renaming  declaration  is
  530. visible, the identifier, or operator symbol of this declaration denotes the
  531. renamed entity.
  532.  
  533.  
  534. The first form of renaming declaration is used for the renaming of objects.
  535. The  renamed  entity  must  be an object of the base type of the type mark.
  536. The properties of the renamed object  are  not  affected  by  the  renaming
  537. declaration.   In particular, its value and whether or not it is a constant
  538. are unaffected;  similarly, the constraints that apply to an object are not
  539. affected by renaming (any constraint  implied  by  the  type  mark  of  the
  540. renaming  declaration  is ignored).  The renaming declaration is legal only
  541. if exactly one object has this type and can be denoted by the object  name.
  542.  
  543.  
  544. The  following  restrictions  apply  to the renaming of a subcomponent that
  545. depends on discriminants of a variable.  The renaming is not allowed if the
  546. subtype of the variable, as defined in a corresponding object  declaration,
  547. component declaration, or component subtype indication, is an unconstrained
  548. type;   or  if  the  variable  is a generic formal object (of mode in out).
  549. Similarly if the variable is  a  formal  parameter,  the  renaming  is  not
  550. allowed  if  the  type mark given in the parameter specification denotes an
  551. unconstrained type whose discriminants have default expressions.
  552.  
  553.  
  554. The second form of  renaming  declaration  is  used  for  the  renaming  of
  555. exceptions;  the third form, for the renaming of packages.
  556.  
  557.  
  558. The  last  form  of  renaming  declaration  is  used  for  the  renaming of
  559. subprograms  and  entries.   The  renamed  subprogram  or  entry  and   the
  560. subprogram  specification  given  in the renaming declaration must have the
  561. same parameter and result type profile (see 6.6).  The renaming declaration
  562. is legal only if exactly one visible  subprogram  or  entry  satisfies  the
  563. above  requirements  and  can  be  denoted by the given subprogram or entry
  564. name.  In addition, parameter modes must be identical for formal parameters
  565. that are at the same parameter position.
  566.  
  567.  
  568. The subtypes of the parameters and result (if any) of a renamed  subprogram
  569. or  entry  are not affected by renaming.  These subtypes are those given in
  570. the  original  subprogram  declaration,  generic  instantiation,  or  entry
  571. declaration  (not  those of the renaming declaration);  even for calls that
  572. use the new name.  On the other hand, a renaming declaration can  introduce
  573. parameter  names  and  default  expressions  that  differ from those of the
  574. renamed subprogram;  named associations of calls with  the  new  subprogram
  575. name  must  use the new parameter name;  calls with the old subprogram name
  576. must use the old parameter names.
  577.  
  578.  
  579. A procedure can only be renamed as a procedure.  Either of  a  function  or
  580. operator  can be renamed as either of a function or operator;  for renaming
  581. as  an  operator,  the  subprogram  specification  given  in  the  renaming
  582. declaration  is  subject  to  the  rules  given in section 6.7 for operator
  583. declarations.   Enumeration  literals  can   be   renamed   as   functions;
  584. similarly,  attributes  defined as functions (such as SUCC and PRED) can be
  585. renamed as functions.  An entry can only be renamed as  a  procedure;   the
  586. new name is only allowed to appear in contexts that allow a procedure name.
  587. An  entry of a family can be renamed, but an entry family cannot be renamed
  588. as a whole.
  589.  
  590.  
  591. Examples:
  592.  
  593.     declare
  594.        L : PERSON renames LEFTMOST_PERSON; -- see 3.8.1
  595.     begin
  596.        L.AGE := L.AGE + 1;
  597.     end;
  598.  
  599.     FULL : exception renames TABLE_MANAGER.TABLE_FULL; -- see 7.5
  600.  
  601.     package TM renames TABLE_MANAGER;
  602.  
  603.     function REAL_PLUS(LEFT, RIGHT : REAL   ) return REAL    renames "+";
  604.     function INT_PLUS (LEFT, RIGHT : INTEGER) return INTEGER renames "+";
  605.  
  606.     function ROUGE return COLOR renames RED;  --  see 3.5.1
  607.     function ROT   return COLOR renames RED;
  608.     function ROSSO return COLOR renames ROUGE;
  609.  
  610.     function NEXT(X : COLOR) return COLOR renames COLOR'SUCC; -- see 3.5.5
  611.  
  612.  
  613. Example of a renaming declaration with new parameter names:
  614.  
  615.     function "*" (X,Y : VECTOR) return REAL renames DOT_PRODUCT; -- see 6.1
  616.  
  617.  
  618. Example of a renaming declaration with a new default expression:
  619.  
  620.     function MINIMUM(L : LINK := HEAD) return CELL renames MIN_CELL; -- see 6.1
  621.  
  622. Notes:
  623.  
  624.  
  625. Renaming may be used to resolve name conflicts and to act as  a  shorthand.
  626. Renaming  with  a different identifier or operator symbol does not hide the
  627. old name;  the new name and the old name need not be visible  at  the  same
  628. points.    The   attributes  POS  and  VAL  cannot  be  renamed  since  the
  629. corresponding specifications cannot be written;  the  same  holds  for  the
  630. predefined multiplying operators with a universal_fixed result.
  631.  
  632.  
  633. Calls  with  the  new name of a renamed entry are procedure call statements
  634. and are not allowed at places where  the  syntax  requires  an  entry  call
  635. statement  in  conditional  and  timed  entry  calls;  similarly, the COUNT
  636. attribute is not available for the new name.
  637.  
  638.  
  639. A task object that is declared by an object declaration can be  renamed  as
  640. an   object.    However,   a  single  task  cannot  be  renamed  since  the
  641. corresponding task type is anonymous.  For similar reasons, an object of an
  642. anonymous array type cannot be  renamed.   No  syntactic  form  exists  for
  643. renaming a generic unit.
  644.  
  645.  
  646. A subtype can be used to achieve the effect of renaming a type (including a
  647. task type) as in
  648.  
  649.     subtype MODE is TEXT_IO.FILE_MODE;
  650.  
  651.  
  652. References:   allow  1.6, attribute 4.1.4, base type 3.3, conditional entry
  653. call 9.7.2,  constant  3.2.1,  constrained  subtype  3.3,  constraint  3.3,
  654. declaration  3.1,  default  expression 6.1, depend on a discriminant 3.7.1,
  655. discriminant 3.7.1, elaboration 3.1 3.9, entry 9.5, entry call  9.5,  entry
  656. call  statement  9.5,  entry declaration 9.5, entry family 9.5, enumeration
  657. literal 3.5.1, evaluation of a name 4.1,  exception  11,  formal  parameter
  658. 6.1,  function  6.5,  identifier 2.3, legal 1.6, mode 6.1, name 4.1, object
  659. 3.2, object  declaration  3.2,  operator  6.7,  operator  declaration  6.7,
  660. operator symbol 6.1, package 7, parameter 6.2, parameter specification 6.1,
  661. procedure   6.1,   procedure   call   statement  6.4,  reserved  word  2.9,
  662. subcomponent 3.3, subprogram 6, subprogram call 6.4, subprogram declaration
  663. 6.1, subprogram specification 6.1, subtype 3.3.2, task  object  9.2,  timed
  664. entry call 9.7.3, type 3.3, type mark 3.3.2, variable 3.2.1, visibility 8.3
  665.  
  666. 8.6  The Package Standard
  667.  
  668.  
  669. The predefined types (for example the types BOOLEAN, CHARACTER and INTEGER)
  670. are  the  types  that are declared in a predefined package called STANDARD;
  671. this package also includes the declarations of their predefined operations.
  672. The package STANDARD is described in Annex C.  Apart  from  the  predefined
  673. numeric  types,  the specification of the package STANDARD must be the same
  674. for all implementations of the language.
  675.  
  676.  
  677. The package STANDARD  forms  a  declarative  region  which  encloses  every
  678. library  unit  and consequently the main program;  the declaration of every
  679. library unit is assumed to occur  immediately  within  this  package.   The
  680. implicit  declarations of library units are assumed to be ordered in such a
  681. way that the scope of a given library unit includes  any  compilation  unit
  682. that  mentions  the given library unit in a with clause.  However, the only
  683. library units that are visible within  a  given  compilation  unit  are  as
  684. follows:   they  include  the  library units named by all with clauses that
  685. apply to the given unit, and moreover, if the given  unit  is  a  secondary
  686. unit of some library unit, they include this library unit.
  687.  
  688. Notes:
  689.  
  690.  
  691. If  all  block  statements  of  a  program are named, then the name of each
  692. program unit can always be  written  as  an  expanded  name  starting  with
  693. STANDARD (unless this package is itself hidden).
  694.  
  695.  
  696. If  a type is declared in the visible part of a library package, then it is
  697. a consequence of the visibility rules  that  a  basic  operation  (such  as
  698. assignment)  for  this  type  is  directly visible at places where the type
  699. itself is not visible (whether by selection  or  directly).   However  this
  700. operation  can  only  be  applied  to  operands  that  are  visible and the
  701. declaration of these operands requires the visibility of either the type or
  702. one of its subtypes.
  703.  
  704.  
  705. References:  applicable with clause 10.1.1, block name 5.6, block statement
  706. 5.6, declaration 3.1, declarative region 8.1, expanded name  4.1.3,  hiding
  707. 8.3,  identifier  2.3,  implicit  declaration  3.1, library unit 10.1, loop
  708. statement 5.5, main program 10.1, must 1.6,  name  4.1,  occur  immediately
  709. within  8.1,  operator 6.7, package 7, program unit 6, secondary unit 10.1,
  710. subtype 3.3, type 3.3, visibility 8.3, with clause 10.1.1
  711.  
  712. 8.7  The Context of Overload Resolution
  713.  
  714.  
  715. Overloading is defined for subprograms,  enumeration  literals,  operators,
  716. and  single  entries,  and  also  for  the  operations that are inherent in
  717. several basic operations such as assignment, membership tests,  allocators,
  718. the literal null, aggregates, and string literals.
  719.  
  720.  
  721. For  overloaded entities, overload resolution determines the actual meaning
  722. that an occurrence of an identifier has, whenever the visibility rules have
  723. determined that more than one meaning is acceptable at the  place  of  this
  724. occurrence;   overload resolution likewise determines the actual meaning of
  725. an occurrence of an operator or some basic operation.
  726.  
  727.  
  728. At such a place all visible declarations are considered.  The occurrence is
  729. only legal if there is exactly one interpretation of  each  constituent  of
  730. the  innermost  complete  context;   a  complete  context  is  one  of  the
  731. following:
  732.  
  733.  
  734.   -  A declaration.
  735.  
  736.  
  737.   -  A statement.
  738.  
  739.  
  740.   -  A representation clause.
  741.  
  742.  
  743. When considering possible interpretations of a complete context,  the  only
  744. rules  considered are the syntax rules, the scope and visibility rules, and
  745. the rules of the form described below.
  746.  
  747.  
  748. (a)  Any rule that requires a name or expression to have a certain type, or
  749.      to have the same type as another name or expression.
  750.  
  751.  
  752. (b)  Any rule that requires the type of a name or expression to be  a  type
  753.      of  a certain class;  similarly, any rule that requires a certain type
  754.      to be a discrete, integer, real,  universal,  character,  boolean,  or
  755.      nonlimited type.
  756.  
  757.  
  758. (c)  Any rule that requires a prefix to be appropriate for a certain  type.
  759.  
  760.  
  761. (d)  Any rule that specifies a certain type as the result type of  a  basic
  762.      operation,  and any rule that specifies that this type is of a certain
  763.      class.
  764.  
  765.  
  766. (e)  The rules that require the type of an aggregate or string  literal  to
  767.      be  determinable  solely  from the enclosing complete context (see 4.3
  768.      and 4.2).  Similarly, the rules that require the type of the prefix of
  769.      an attribute, the type of the expression of a case statement,  or  the
  770.      type  of  the  operand  of  a  type  conversion,  to  be  determinable
  771.      independently of the context (see 4.1.4, 5.4, 4.6, and 6.4.1).
  772.  
  773.  
  774. (f)  The rules given in section  6.6,  for  the  resolution  of  overloaded
  775.      subprogram  calls;   in  section  4.6, for the implicit conversions of
  776.      universal expressions;  in section 3.6.1, for  the  interpretation  of
  777.      discrete  ranges  with bounds having a universal type;  and in section
  778.      4.1.3, for the interpretation of an expanded name whose prefix denotes
  779.      a subprogram or an accept statement.
  780.  
  781.  
  782. Subprogram names used as pragma arguments follow  a  different  rule:   the
  783. pragma can apply to several overloaded subprograms, as explained in section
  784. 6.3.2  for  the pragma INLINE, in section 11.7 for the pragma SUPPRESS, and
  785. in section 13.9 for the pragma INTERFACE.
  786.  
  787.  
  788. Similarly, the simple names given in context clauses (see  10.1.1)  and  in
  789. address clauses (see 13.5) follow different rules.
  790.  
  791. Notes:
  792.  
  793.  
  794. If  there  is  only one possible interpretation, the identifier denotes the
  795. corresponding entity.  However, this does not mean that the  occurrence  is
  796. necessarily  legal  since other requirements exist which are not considered
  797. for overload resolution;  for example,  the  fact  that  an  expression  is
  798. static,  the  parameter  modes,  whether an object is constant, conformance
  799. rules,  forcing  occurrences  for  a  representation   clause,   order   of
  800. elaboration, and so on.
  801.  
  802.  
  803. Similarly,  subtypes  are  not  considered  for  overload  resolution  (the
  804. violation of a constraint does not make a program  illegal  but  raises  an
  805. exception during program execution).
  806.  
  807.  
  808. Rules that require certain constructs to have the same parameter and result
  809. type  profile  fall  under the category (a);  the same holds for rules that
  810. require conformance of  two  constructs  since  conformance  requires  that
  811. corresponding  names  be  given  the  same  meaning  by  the visibility and
  812. overloading rules.
  813.  
  814.  
  815. A loop parameter specification is  a  declaration,  and  hence  a  complete
  816. context.
  817.  
  818.  
  819. References:   aggregate 4.3, allocator 4.8, assignment 5.2, basic operation
  820. 3.3.3, case statement 5.4, class of type 3.3, declaration 3.1,  entry  9.5,
  821. enumeration  literal  3.5.1, exception 11, expression 4.4, formal part 6.1,
  822. identifier 2.3, legal 1.6, literal 4.2, loop parameter  specification  5.5,
  823. membership  test  4.5.2,  name  4.1,  null  literal  3.8,  operation 3.3.3,
  824. operator 4.5, overloading 6.6,  pragma  2.8,  representation  clause  13.1,
  825. statement  5,  static  expression  4.9,  static  subtype 4.9, subprogram 6,
  826. subtype 3.3, type conversion 4.6, visibility 8.3
  827.  
  828.  
  829. Rules of the form (a):  address clause 13.5, assignment 5.2,  choice  3.7.3
  830. 4.3.2  5.4,  component  association  4.3.1  4.3.2,  conformance  rules 9.5,
  831. default expression 3.7 3.7.1 6.1  12.1.1,  delay  statement  9.6,  discrete
  832. range   3.6.1   5.5   9.5,   discriminant   constraint  3.7.2,  enumeration
  833. representation clause 13.3, generic  parameter  association  12.3.1,  index
  834. constraint  3.6.1,  index  expression 4.1.1 4.1.2 9.5, initial value 3.2.1,
  835. membership test 4.5.2, parameter association 6.4.1,  parameter  and  result
  836. type  profile  8.5  12.3.6, qualified expression 4.7, range constraint 3.5,
  837. renaming of an object 8.5, result expression 5.8
  838.  
  839.  
  840. Rules of  the  form  (b):   abort  statement  9.10,  assignment  5.2,  case
  841. expression  5.4, condition 5.3 5.5 5.7 9.7.1, discrete range 3.6.1 5.5 9.5,
  842. fixed point type declaration 3.5.9, floating point type declaration  3.5.7,
  843. integer  type  declaration  3.5.4, length clause 13.2, membership test 4.4,
  844. number declaration  3.2.2,  record  representation  clause  13.4,  selected
  845. component 4.1.3, short-circuit control form 4.4, val attribute 3.5.5
  846.  
  847.  
  848. Rules  of the form (c):  indexed component 4.1.1, selected component 4.1.3,
  849. slice 4.1.2
  850.  
  851.  
  852. Rules of the form (d):  aggregate 4.3, allocator 4.8, membership test  4.4,
  853. null  literal  4.2,  numeric  literal  2.4, short-circuit control form 4.4,
  854. string literal 4.2
  855.